﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;

namespace QuanLyKhachSan.DanhMuc
{
    public partial class frmDichVu : DevExpress.XtraEditors.XtraForm
    {
        DataClassesKhachSanDataContext dc = new DataClassesKhachSanDataContext(SystemInfo.pub_ConnString);
        Boolean saved = true;
        DialogResult result;

        public frmDichVu()
        {
            InitializeComponent();
        }

        private void frmDichVu_Load(object sender, EventArgs e)
        {
            var dv = dc.GetTable<DICH_VU>();
            gcDichVu.DataSource = dv;
        }

        private void btLuu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                gvDichVu.MoveLast();
                gvDichVu.MoveFirst();
                dc.SubmitChanges();
                //XtraMessageBox.Show("Đã lưu!","Lưu",MessageBoxButtons.OK,MessageBoxIcon.Information);
                saved = true;

                if (this.Text.Substring(this.Text.Length - 1, 1) == "*")
                {
                    this.Text = this.Text.Substring(0, this.Text.Length - 1);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Cannot insert duplicate key in object"))
                {
                    saved = true;
                    XtraMessageBox.Show("Có lỗi trong quá trình lưu dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }
                else
                {
                    throw;
                }

            }
        }

        private void btXoa_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (gvDichVu.RowCount == 0)
            {
                XtraMessageBox.Show("Không có dữ liệu để xóa.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                result = XtraMessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
                if (result == DialogResult.Yes)
                {
                    int rowHandles = gvDichVu.FocusedRowHandle;
                    try
                    {
                        DICH_VU dv = (DICH_VU)gvDichVu.GetRow(rowHandles);
                        if (dv.SU_DUNGs.Count > 0)
                        {
                            XtraMessageBox.Show("Không thể xóa!\nDữ liệu đang được sử dụng.", "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        }
                        else
                        {
                            gvDichVu.DeleteRow(rowHandles);
                            saved = false;
                            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
                            {
                                this.Text = this.Text + "*";
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        private void frmDichVu_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (saved == false)
            {
                result = XtraMessageBox.Show("Dữ liệu chưa được lưu!\nBạn có muốn lưu không?", "Dịch vụ", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if (result == System.Windows.Forms.DialogResult.Yes)
                {
                    dc.SubmitChanges();
                }
                else if (result == System.Windows.Forms.DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
            }
        }

        private void gvDichVu_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            string NewValue = (string)e.Value;

            #region //Region Tên dịch vụ
            
            if (gvDichVu.FocusedColumn == colTen)
            {
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Tên dịch vụ không được để trống.";
                    }
                    else
                    {
                        for (int i = 0; i < gvDichVu.RowCount; i++)
                        {
                            string OldValue = (string)gvDichVu.GetRowCellValue(i, colTen);
                            int[] rowHandle = gvDichVu.GetSelectedRows();
                            if (OldValue.ToUpper().Trim() == NewValue.ToUpper().Trim() && i != rowHandle[0])
                            {
                                e.Valid = false;
                                e.ErrorText = "Tên dịch vụ này đã tồn tại.";
                                break;
                            }
                        }
                    }
                }

            }
            #endregion

            #region //Region Đơn giá

            if (gvDichVu.FocusedColumn == colDonGia)
            {
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Đơn giá không được để trống.";
                    }
                    //else
                    //{
                    //    for (int i = 0; i < gvDichVu.RowCount; i++)
                    //    {
                    //        string OldValue = (string)gvDichVu.GetRowCellValue(i, colTen);
                    //        int[] rowHandle = gvDichVu.GetSelectedRows();
                    //        if (OldValue.ToUpper().Trim() == NewValue.ToUpper().Trim() && i != rowHandle[0])
                    //        {
                    //            e.Valid = false;
                    //            e.ErrorText = "Tên dịch vụ này đã tồn tại.";
                    //            break;
                    //        }
                    //    }
                    //}
                }

            }
            #endregion

            #region //Region Đơn vị tính

            if (gvDichVu.FocusedColumn == colDonViTinh)
            {
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Đơn vị tính không được để trống.";
                    }
                    //else
                    //{
                    //    for (int i = 0; i < gvDichVu.RowCount; i++)
                    //    {
                    //        string OldValue = (string)gvDichVu.GetRowCellValue(i, colTen);
                    //        int[] rowHandle = gvDichVu.GetSelectedRows();
                    //        if (OldValue.ToUpper().Trim() == NewValue.ToUpper().Trim() && i != rowHandle[0])
                    //        {
                    //            e.Valid = false;
                    //            e.ErrorText = "Tên dịch vụ này đã tồn tại.";
                    //            break;
                    //        }
                    //    }
                    //}
                }

            }
            #endregion
        }

        private void gvDichVu_InvalidValueException(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.DisplayError;
        }

        //ValidateRow chỉ nên dùng để bắt lỗi nhập rỗng khi thêm dòng mới
        private void gvDichVu_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            try
            {
                string DV_Ten = (string)gvDichVu.GetRowCellValue(e.RowHandle, colTen);
                if (DV_Ten == null)
                {
                    e.Valid = false;
                    gvDichVu.SetColumnError(colTen, "Tên dịch vụ không được để trống.");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void gvDichVu_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            e.ExceptionMode = ExceptionMode.NoAction;
        }

        private void btDong_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        private void gvDichVu_DragObjectDrop(object sender, DevExpress.XtraGrid.Views.Base.DragObjectDropEventArgs e)
        {
            if (gvDichVu.GroupCount > 0)
            {
                gvDichVu.OptionsBehavior.Editable = false;
            }
            else
            {
                gvDichVu.OptionsBehavior.Editable = true;
            }
        }

        private void gvDichVu_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            saved = false;
            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
            {
                this.Text = this.Text + "*";
            }
        }

        
    }
}